﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Utility
{
    public class GenerateContainerNum
    {
        public GenerateContainerNum()
        {
        }
        public int Generate(string Owner_Code,string Registration_Code)
        {
            Hashtable ht = Map();
            
            int first = Convert.ToInt32(ht[Owner_Code[0].ToString()]);
            int second = Convert.ToInt32(ht[Owner_Code[1].ToString()]);
            int third = Convert.ToInt32(ht[Owner_Code[2].ToString()]);
            int firth = Convert.ToInt32(ht[Owner_Code[3].ToString()]);
            double num1 = Math.Pow(2, 0)* first;
            double num2 = Math.Pow(2, 1) * second;
            double num3 = Math.Pow(2, 2) * third;
            double num4 = Math.Pow(2, 3) * firth;
            double num5 = Math.Pow(2, 4) * Convert.ToDouble(Registration_Code[0].ToString());
            double num6 = Math.Pow(2, 5) * Convert.ToDouble(Registration_Code[1].ToString());
            double num7 = Math.Pow(2, 6) * Convert.ToDouble(Registration_Code[2].ToString());
            double num8 = Math.Pow(2, 7) * Convert.ToDouble(Registration_Code[3].ToString());
            double num9 = Math.Pow(2, 8) * Convert.ToDouble(Registration_Code[4].ToString());
            double num10 = Math.Pow(2, 9) * Convert.ToDouble(Registration_Code[5].ToString());

            double sum = num1+num2+num3+num4+num5+num6+num7+num8+num9+num10;
            int result = Convert.ToInt32(sum % 11);
            if (result == 10)
            {
                result = 0;
            }
            return result;
        }

        private Hashtable Map()
        {
            Hashtable ht = new Hashtable();
            ht.Add("0", 0);
            ht.Add("1", 1);
            ht.Add("2", 2);
            ht.Add("3", 3);
            ht.Add("4", 4);
            ht.Add("5", 5);
            ht.Add("6", 6);
            ht.Add("7", 7);
            ht.Add("8", 8);
            ht.Add("9", 9);
            ht.Add("A", 10);
            ht.Add("B", 12);
            ht.Add("C", 13);
            ht.Add("D", 14);
            ht.Add("E", 15);
            ht.Add("F", 16);
            ht.Add("G", 17);
            ht.Add("H", 18);
            ht.Add("I", 19);
            ht.Add("J", 20);
            ht.Add("K", 21);
            ht.Add("L", 23);
            ht.Add("M", 24);
            ht.Add("N", 25);
            ht.Add("O", 26);
            ht.Add("P", 27);
            ht.Add("Q", 28);
            ht.Add("R", 29);
            ht.Add("S", 30);
            ht.Add("T", 31);
            ht.Add("U", 32);
            ht.Add("V", 34);
            ht.Add("W", 35);
            ht.Add("X", 36);
            ht.Add("Y", 37);
            ht.Add("Z", 38);
            return ht;
        }
    }
}
